{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "b4873f83",
   "metadata": {
    "origin_pos": 0
   },
   "source": [
    "# 自动微分\n",
    ":label:`sec_autograd`\n",
    "\n",
    "正如 :numref:`sec_calculus`中所说，求导是几乎所有深度学习优化算法的关键步骤。\n",
    "虽然求导的计算很简单，只需要一些基本的微积分。\n",
    "但对于复杂的模型，手工进行更新是一件很痛苦的事情（而且经常容易出错）。\n",
    "\n",
    "深度学习框架通过自动计算导数，即*自动微分*（automatic differentiation）来加快求导。\n",
    "实际中，根据设计好的模型，系统会构建一个*计算图*（computational graph），\n",
    "来跟踪计算是哪些数据通过哪些操作组合起来产生输出。\n",
    "自动微分使系统能够随后反向传播梯度。\n",
    "这里，*反向传播*（backpropagate）意味着跟踪整个计算图，填充关于每个参数的偏导数。\n",
    "\n",
    "## 一个简单的例子\n",
    "\n",
    "作为一个演示例子，(**假设我们想对函数$y=2\\mathbf{x}^{\\top}\\mathbf{x}$关于列向量$\\mathbf{x}$求导**)。\n",
    "首先，我们创建变量`x`并为其分配一个初始值。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "98cd8a9e",
   "metadata": {
    "origin_pos": 2,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0., 1., 2., 3.])"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import torch\n",
    "\n",
    "x = torch.arange(4.0)\n",
    "x"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ec430520",
   "metadata": {
    "origin_pos": 5
   },
   "source": [
    "[**在我们计算$y$关于$\\mathbf{x}$的梯度之前，需要一个地方来存储梯度。**]\n",
    "重要的是，我们不会在每次对一个参数求导时都分配新的内存。\n",
    "因为我们经常会成千上万次地更新相同的参数，每次都分配新的内存可能很快就会将内存耗尽。\n",
    "注意，一个标量函数关于向量$\\mathbf{x}$的梯度是向量，并且与$\\mathbf{x}$具有相同的形状。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "e27a5df4",
   "metadata": {
    "origin_pos": 7,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "x.requires_grad_(True)  # 等价于x=torch.arange(4.0,requires_grad=True)\n",
    "x.grad  # 默认值是None"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bd993524",
   "metadata": {
    "origin_pos": 10
   },
   "source": [
    "(**现在计算$y$。**)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4c3f80b7",
   "metadata": {
    "origin_pos": 12,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(28., grad_fn=<MulBackward0>)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = 2 * torch.dot(x, x)\n",
    "y"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "35523dbc",
   "metadata": {
    "origin_pos": 15
   },
   "source": [
    "`x`是一个长度为4的向量，计算`x`和`x`的点积，得到了我们赋值给`y`的标量输出。\n",
    "接下来，[**通过调用反向传播函数来自动计算`y`关于`x`每个分量的梯度**]，并打印这些梯度。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a1c3a419",
   "metadata": {
    "origin_pos": 17,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([ 0.,  4.,  8., 12.])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y.backward()\n",
    "x.grad"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dca6a271",
   "metadata": {
    "origin_pos": 20
   },
   "source": [
    "函数$y=2\\mathbf{x}^{\\top}\\mathbf{x}$关于$\\mathbf{x}$的梯度应为$4\\mathbf{x}$。\n",
    "让我们快速验证这个梯度是否计算正确。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b8493d0a",
   "metadata": {
    "origin_pos": 22,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([True, True, True, True])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.grad == 4 * x"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2733c623",
   "metadata": {
    "origin_pos": 25
   },
   "source": [
    "[**现在计算`x`的另一个函数。**]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "f2fcd392",
   "metadata": {
    "origin_pos": 27,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([1., 1., 1., 1.])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 在默认情况下，PyTorch会累积梯度，我们需要清除之前的值\n",
    "x.grad.zero_() # _ 表示重写我的内容, 这里将所有的梯度重写为 0\n",
    "y = x.sum()\n",
    "y.backward()\n",
    "x.grad"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "58f4f459",
   "metadata": {
    "origin_pos": 30
   },
   "source": [
    "## 非标量变量的反向传播\n",
    "\n",
    "当`y`不是标量时，向量`y`关于向量`x`的导数的最自然解释是一个矩阵。\n",
    "对于高阶和高维的`y`和`x`，求导的结果可以是一个高阶张量。\n",
    "\n",
    "然而，虽然这些更奇特的对象确实出现在高级机器学习中（包括[**深度学习中**]），\n",
    "但当调用向量的反向计算时，我们通常会试图计算一批训练样本中每个组成部分的损失函数的导数。\n",
    "这里(**，我们的目的不是计算微分矩阵，而是单独计算批量中每个样本的偏导数之和。**)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "f4e62a5d",
   "metadata": {
    "origin_pos": 32,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0., 2., 4., 6.])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对非标量调用backward需要传入一个gradient参数，该参数指定微分函数关于self的梯度。\n",
    "# 本例只想求偏导数的和，所以传递一个1的梯度是合适的\n",
    "x.grad.zero_()\n",
    "y = x * x\n",
    "# 等价于y.backward(torch.ones(len(x)))\n",
    "y.sum().backward()\n",
    "x.grad"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "80f510c4",
   "metadata": {
    "origin_pos": 35
   },
   "source": [
    "## 分离计算\n",
    "\n",
    "有时，我们希望[**将某些计算移动到记录的计算图之外**]。\n",
    "例如，假设`y`是作为`x`的函数计算的，而`z`则是作为`y`和`x`的函数计算的。\n",
    "想象一下，我们想计算`z`关于`x`的梯度，但由于某种原因，希望将`y`视为一个常数，\n",
    "并且只考虑到`x`在`y`被计算后发挥的作用。\n",
    "\n",
    "这里可以分离`y`来返回一个新变量`u`，该变量与`y`具有相同的值，\n",
    "但丢弃计算图中如何计算`y`的任何信息。\n",
    "换句话说，梯度不会向后流经`u`到`x`。\n",
    "因此，下面的反向传播函数计算`z=u*x`关于`x`的偏导数，同时将`u`作为常数处理，\n",
    "而不是`z=x*x*x`关于`x`的偏导数。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "8dab493d",
   "metadata": {
    "origin_pos": 37,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([True, True, True, True])"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.grad.zero_()\n",
    "y = x * x\n",
    "u = y.detach() # 这里将 y 移出去了\n",
    "z = u * x\n",
    "\n",
    "z.sum().backward()\n",
    "x.grad == u"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f8fe6f9c",
   "metadata": {
    "origin_pos": 40
   },
   "source": [
    "由于记录了`y`的计算结果，我们可以随后在`y`上调用反向传播，\n",
    "得到`y=x*x`关于的`x`的导数，即`2*x`。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "271a9b3a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-08-18T07:07:32.759344Z",
     "iopub.status.busy": "2023-08-18T07:07:32.758633Z",
     "iopub.status.idle": "2023-08-18T07:07:32.764663Z",
     "shell.execute_reply": "2023-08-18T07:07:32.763922Z"
    },
    "origin_pos": 42,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([True, True, True, True])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.grad.zero_()\n",
    "y.sum().backward()\n",
    "x.grad == 2 * x"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fd79d12f",
   "metadata": {
    "origin_pos": 45
   },
   "source": [
    "## Python控制流的梯度计算\n",
    "\n",
    "使用自动微分的一个好处是：\n",
    "[**即使构建函数的计算图需要通过Python控制流（例如，条件、循环或任意函数调用），我们仍然可以计算得到的变量的梯度**]。\n",
    "在下面的代码中，`while`循环的迭代次数和`if`语句的结果都取决于输入`a`的值。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "6323b2ff",
   "metadata": {
    "origin_pos": 47,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "def f(a):\n",
    "    b = a * 2\n",
    "    while b.norm() < 1000:\n",
    "        b = b * 2\n",
    "    if b.sum() > 0:\n",
    "        c = b\n",
    "    else:\n",
    "        c = 100 * b\n",
    "    return c"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "51aaf333",
   "metadata": {
    "origin_pos": 50
   },
   "source": [
    "让我们计算梯度。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "7719d6b6",
   "metadata": {
    "origin_pos": 52,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "a = torch.randn(size=(), requires_grad=True)\n",
    "d = f(a)\n",
    "d.backward()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "816a1ac2",
   "metadata": {
    "origin_pos": 55
   },
   "source": [
    "我们现在可以分析上面定义的`f`函数。\n",
    "请注意，它在其输入`a`中是分段线性的。\n",
    "换言之，对于任何`a`，存在某个常量标量`k`，使得`f(a)=k*a`，其中`k`的值取决于输入`a`，因此可以用`d/a`验证梯度是否正确。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "2595bdc0",
   "metadata": {
    "origin_pos": 57,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(True)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.grad == d / a"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "67fb5517",
   "metadata": {
    "origin_pos": 60
   },
   "source": [
    "## 小结\n",
    "\n",
    "* 深度学习框架可以自动计算导数：我们首先将梯度附加到想要对其计算偏导数的变量上，然后记录目标值的计算，执行它的反向传播函数，并访问得到的梯度。\n",
    "\n",
    "## 练习\n",
    "\n",
    "1. 为什么计算二阶导数比一阶导数的开销要更大？\n",
    "1. 在运行反向传播函数之后，立即再次运行它，看看会发生什么。\n",
    "1. 在控制流的例子中，我们计算`d`关于`a`的导数，如果将变量`a`更改为随机向量或矩阵，会发生什么？\n",
    "1. 重新设计一个求控制流梯度的例子，运行并分析结果。\n",
    "1. 使$f(x)=\\sin(x)$，绘制$f(x)$和$\\frac{df(x)}{dx}$的图像，其中后者不使用$f'(x)=\\cos(x)$。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "id": "3dfe6bcb-988a-4389-ac37-ccfde3144a5e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x25225e400a0>]"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def f_exe(x):\n",
    "    return torch.sin(x)\n",
    "\n",
    "x = torch.arange(0, 10, 0.1)\n",
    "x.requires_grad_(True)\n",
    "\n",
    "y = f_exe(x)\n",
    "z = y.detach()\n",
    "y.sum().backward()\n",
    "\n",
    "x.requires_grad_(False)\n",
    "plt.plot(x, z)\n",
    "plt.plot(x, x.grad)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "530f74f8",
   "metadata": {
    "origin_pos": 62,
    "tab": [
     "pytorch"
    ]
   },
   "source": [
    "[Discussions](https://discuss.d2l.ai/t/1759)\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.21"
  },
  "required_libs": []
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
